//
//  ListViewModel.swift
//  Weibo
//
//  Created by 唐润欣 on 16/6/21.
//  Copyright © 2016年 唐润欣. All rights reserved.
//

import UIKit

//MARK: - 属性，构造函数
class ListViewModel: NSObject {
    
    /// 数据源数组
    lazy var statusViewModelArray: [StatusViewModel] = []
    
    ///  获取网络数据
    ///
    ///  - parameter ispullUp: 是否是上拉刷新
    ///  - parameter finish:   完成回调
    func loadData(isPullUp: Bool, finish: (success: Bool) ->()) {
        
        var since_id = statusViewModelArray.first?.status.id ?? 0
        var max_id = statusViewModelArray.last?.status.id ?? 0
        
        //传max_id, since_id设为0.获取的数据放到数据源的后面
        //传since_id, max_id设为0。获取的数据放到数据源的前面
        if isPullUp { since_id = 0 } else { max_id = 0 }
        
        //网络请求首页数据
        NetworkTool.sharedTool.loadStatus(since_id, max_id: max_id) { (response) -> () in
            
            if let response = response, statuses = response["statuses"] as? [[String: AnyObject]] {
                
                //定义一个数组，存放从服务器返回的status对应的viewModel
                var responseViewModelArray: [StatusViewModel] = []
                
                for dict in statuses {
                    
                    //将字典转模型
                    let status = Status.yy_modelWithJSON(dict)
                    
                    //用微博模型(Status)，初始化一个statusViewModel
                    let statusViewModel = StatusViewModel(status: status!)
                    responseViewModelArray.append(statusViewModel)
                }
                
                //如果是上拉刷新
                if isPullUp {
                    
                    //把返回的数据接在statusArray的后面
                    responseViewModelArray.removeFirst()
                    self.statusViewModelArray += responseViewModelArray
                    
                } else {
                    
                    //把返回的数据接在statusArray的前面
                    //如果是传max_id
                    self.statusViewModelArray = responseViewModelArray + self.statusViewModelArray
                }
                
                //完工回调
                finish(success: true)
            }
        }
    }
}
